//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#ifndef _ProcessCathFASTAProfile_h__
#define	_ProcessCathFASTAProfile_h__
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#include "CathFASTAProfile.h"
#include "PsiPredProt.h"
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
class ProcessCathFASTAProfile {
  
  private:
    
    String*                     namefileIn;
    String*                     namefileOut;
    
    TListE <String>*            filters;
    
    TListE <CathFASTAProfile>*  listCathDomainProfile;
    
  protected:  
    
    bool                        ComputeChemicalClassification (CathFASTAProfile*);
    bool                        ComputePhysicalClassification (CathFASTAProfile*);
    
  public:
    
    ProcessCathFASTAProfile ();
    ProcessCathFASTAProfile (const ProcessCathFASTAProfile&);
    ProcessCathFASTAProfile (const ProcessCathFASTAProfile*);
    
    ~ProcessCathFASTAProfile ();

    void                        NamefileIn (String*);
    void                        NamefileOut (String*);
    void                        Filters (TListE <String>*);
    void                        ListCathDomainProfile (TListE <CathFASTAProfile>*);
    
    String*                     NamefileIn (void);
    String*                     NamefileOut (void);
    TListE <String>*            Filters (void);
    TListE <CathFASTAProfile>*  ListCathDomainProfile (void);
    
    bool                        AddFilter (String*);
    bool                        AddFilter (char*);
    bool                        CleanFilters (void);
    bool                        ExecuteFilters (void);
    
    bool                        LoadData (void);
    
    bool                        SplitInFile (int);
    
    bool                        PredictSecondaryStructure (void);
    bool                        UpdatePredictSecondaryStructure (void);
    bool                        UpdatePredictSecondaryStructure (String*);
    
    bool                        HiddenContainingData (TListE <CathFASTAProfile>*);
    
    bool                        ExpandDuplicatedDataSecondaryStructure (String*);
    
    bool                        FillResiduesClassification (void);
    
    bool                        OutFilterFile (void);
    
    bool                        OutFASTAFileSequence (void);
    bool                        OutFASTAFileSecondaryStruture (void);
    bool                        OutFASTAFileConfidenceSeqStr (void);
    bool                        OutFASTAFileChemicalClassification (void);
    bool                        OutFASTAFilePhysicalClassification (void);
    bool                        OutFASTAFileMetaStructure (void);
    
    bool                        OutFASTAFileEncodeCHAndMTData (void);
    bool                        OutFASTAFileEncodePHAndMTData (void);
    
    bool                        OutResidueFrequency (void);
    bool                        OutSecondaryStructureFrequency (void); //
    bool                        OutChemicalClassificationFrequency (void); //
    bool                        OutPhysicalClassificationFrequency (void); //
    bool                        OutMetaStructureFrequency (void); //
    
    bool                        GetDistributionOfLength (void);
    
    ProcessCathFASTAProfile     operator= (const ProcessCathFASTAProfile&);
    
};
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
#endif
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
//---------------------------------------------------------------------------------------------------------------------------------------------------------//
